package edu.uoc.tdp.pac4.estudiant.gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.rmi.RemoteException;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

import edu.uoc.tdp.pac4.beans.Estudiante;
import edu.uoc.tdp.pac4.beans.Prueba;
import edu.uoc.tdp.pac4.beans.Ronda;
import edu.uoc.tdp.pac4.common.EOlympicsException;
import edu.uoc.tdp.pac4.common.RemotInterface;
import edu.uoc.tdp.pac4.i18n.TDSLanguageUtils;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class PantallaInscripcion extends JFrame {

	private JPanel contentPane;
	private JFrame frame;
	private JTable table;
	private RemotInterface remoto;
	private Estudiante estudiante;
	private Prueba pr;

	/**
	 * Create the frame.
	 */
	public PantallaInscripcion(RemotInterface rem, Prueba prueba, Estudiante est) throws Exception {
		remoto = rem;
		estudiante=est;
		pr = prueba;
		
		frame = new JFrame();
		frame.setResizable(false);
		frame.setBounds(100, 100, 563, 439);
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		JPanel panel = new JPanel();
		frame.getContentPane().add(panel, BorderLayout.CENTER);
		panel.setLayout(null);
		
		
		JPanel panel_2 = new JPanel();
		panel_2.setBackground(Color.WHITE);
		panel_2.setBounds(0, 0, 557, 76);
		panel.add(panel_2);
		panel_2.setLayout(null);
		
		JLabel label_2 = new JLabel("eOlympics");
		label_2.setForeground(new Color(51, 153, 255));
		label_2.setFont(new Font("Calibri", Font.BOLD, 26));
		label_2.setBounds(262, 28, 177, 26);
		panel_2.add(label_2);
		
		JLabel lblNewLabel = new JLabel("");
		lblNewLabel.setIcon(new ImageIcon(PantallaInscripcion.class.getResource("/images/logo.png")));
		lblNewLabel.setBounds(143, 0, 118, 70);
		panel_2.add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("");
		lblNewLabel_1.setBounds(10, 386, 27, 14);
		panel.add(lblNewLabel_1);
		lblNewLabel_1.setIcon(new ImageIcon(PantallaInscripcion.class.getResource("/images/logo_empresa.png")));
		
		JLabel lblBySoftwebsolutions = new JLabel("by SoftWebSolutions");
		lblBySoftwebsolutions.setBounds(42, 389, 84, 14);
		panel.add(lblBySoftwebsolutions);
		lblBySoftwebsolutions.setFont(new Font("Calibri", Font.PLAIN, 9));
		
		JScrollPane pane = new JScrollPane();
		pane.setBounds(42, 112, 476, 162);
		panel.add(pane);
		DefaultTableModel modelo = new DefaultTableModel(
				new Object[][] {
						{null, null, null},
					},
					new String[] {
							TDSLanguageUtils.getMessage("PantallaIns.tabla.prueba"), 
							TDSLanguageUtils.getMessage("PantallaIns.tabla.tipo"), 
							TDSLanguageUtils.getMessage("PantallaIns.tabla.preguntas")
					}
				);
		table = new JTable(modelo) {
			Class[] columnTypes = new Class[] {
				Object.class, Object.class, Object.class
			};
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}
			 public boolean isCellEditable (int row, int column)
			   {
			       return false; //Para que la tabla no se pueda editar
			   }

		};
		table.setEnabled(false);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		pane.setViewportView(table);
		
		JButton botonAlta = new JButton(TDSLanguageUtils.getMessage("PantallaIns.boton.alta"));
		botonAlta.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
					inscribirse(ev);
			}
		});
		botonAlta.setIcon(new ImageIcon(PantallaInscripcion.class.getResource("/images/add.png")));
		botonAlta.setBounds(382, 354, 136, 45);
		panel.add(botonAlta);
		
		JLabel lblPruebasInscritas = new JLabel(TDSLanguageUtils.getMessage("PantallaIns.label.PrInscritas"));
		lblPruebasInscritas.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblPruebasInscritas.setBounds(41, 87, 165, 24);
		panel.add(lblPruebasInscritas);
		
		JLabel lblAltaEnPrueba = new JLabel(TDSLanguageUtils.getMessage("PantallaIns.label.altaEnPrueba"));
		lblAltaEnPrueba.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblAltaEnPrueba.setBounds(42, 285, 165, 24);
		panel.add(lblAltaEnPrueba);
		
		JLabel lblNewLabel_2 = new JLabel(prueba.getDescripcion());
		lblNewLabel_2.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblNewLabel_2.setBounds(211, 285, 307, 24);
		panel.add(lblNewLabel_2);
		
		frame.setTitle(TDSLanguageUtils.getMessage("PantallaIns.titulo"));
		
		cargarTabla(modelo);
		
		this.frame.setVisible(true);

	}
	
	private void cargarTabla(DefaultTableModel model) throws Exception {
		Prueba prueba = null;
		List<Prueba> lista = null;
		
		try {
			lista = remoto.listaPruebasInscEst(estudiante);
			System.out.println("he recuperado la lista: " + lista);
		} catch (RemoteException e) {
            System.out.println ("Excepcion remota"+e);
            throw new EOlympicsException(EOlympicsException.ERR_REMOTO);
		} catch (EOlympicsException e) {
			System.out.println ("Excepcion normal"+e);
            throw e;
		}

		System.out.println(lista.size());
		model.setRowCount(lista.size());
		int i = 0;
		for (Prueba pr2 : lista) {
			prueba = lista.get(i);
			System.out.println("cargo en la tabla la descripcion");
			table.setValueAt(prueba.getDescripcion(), i, 0);

			Ronda ronda = prueba.getRondaEliminatoria();
			if (ronda == null){
				table.setValueAt(TDSLanguageUtils.getMessage("PantallaInsc.tabla.final"), i, 1);
				System.out.println("cargo en la tabla el numero de preguntas");
				table.setValueAt(prueba.getRondaFinal().getNumeroPreguntas(), i, 2);
			}else{
				table.setValueAt(TDSLanguageUtils.getMessage("PantallaInsc.tabla.eliminatoria"), i, 1);
				System.out.println("cargo el numero de preguntas");
				table.setValueAt(prueba.getRondaEliminatoria().getNumeroPreguntas(), i, 2);
			}
			
			i++;
		}
	}
	
	private void inscribirse(java.awt.event.ActionEvent evt){
		boolean respuesta = false;
		//Abrimos una ventana de confirmacion
		int confirmacion = JOptionPane.showConfirmDialog(this, 
				TDSLanguageUtils.getMessage("PantallaInsc.mensaje.confirm") + " " + pr.getDescripcion(), 
				TDSLanguageUtils.getMessage("PantallaInsc.mensaje.confirmTit"), JOptionPane.YES_NO_OPTION,
				JOptionPane.WARNING_MESSAGE,
				new ImageIcon(PantallaInscripcion.class.getResource("/images/hand_point2.png")));
		if(confirmacion==0){
			try {
				respuesta = remoto.inscripcion(estudiante, pr);
			} catch (RemoteException e) {
	            System.out.println ("Excepcion remota"+e);
			} catch (EOlympicsException e) {
				System.out.println ("Excepcion normal"+e);
			}
			if (respuesta==true){
				frame.dispose();
				JOptionPane.showMessageDialog(null, 
				TDSLanguageUtils.getMessage("PantallaInsc.mensaje.altaOK"), 
				TDSLanguageUtils.getMessage("PantallaInsc.mensaje.confirmTit"), JOptionPane.INFORMATION_MESSAGE,
				new ImageIcon(PantallaInscripcion.class.getResource("/images/check.png")));
				
			}
		}
	}

}
